package com.whfc.emp.service;


import com.whfc.common.exception.BizException;
import com.whfc.common.result.PageData;
import com.whfc.emp.dto.*;
import com.whfc.emp.enums.AttendType;
import com.whfc.emp.param.*;
import com.whfc.entity.dto.OssPathDTO;

import java.util.Date;
import java.util.List;

/**
 * @ClasssName AppEmpAttendService
 * @Description 人员考勤service
 * @Author hw
 * @Date 2020/12/22 15:06
 * @Version 1.0
 */
public interface AppEmpAttendService {

    /**
     * 人员管理-日考勤记录列表
     *
     * @param pageNum
     * @param pageSize
     * @param date
     * @param deptId
     * @param corpId
     * @param groupId
     * @param keyword
     * @param attendState
     * @return
     * @throws Exception
     */
    PageData<AttendDayEmpDTO> attendDayList(Integer pageNum, Integer pageSize, Date date, Integer deptId, Integer corpId, Integer groupId, String keyword, Integer attendState) throws BizException;

    /**
     * 人员管理-日考勤记录统计
     *
     * @param date
     * @param deptId
     * @param corpId
     * @param groupId
     * @param keyword
     * @param empId
     * @return
     * @throws BizException
     */
    AppEmpAttendDayNumDTO attendDayNum(Date date, Integer deptId, Integer corpId, Integer groupId, String keyword, Integer empId) throws BizException;

    /**
     * 人员管理-月考勤记录列表
     *
     * @param pageNum
     * @param pageSize
     * @param time
     * @param deptId
     * @param corpId
     * @param groupId
     * @param keyword
     * @return
     */
    PageData<AppEmpAttendMonthDTO> attendMonthList(Integer pageNum, Integer pageSize, Date time, Integer deptId, Integer corpId, Integer groupId, String keyword) throws BizException;


    /**
     * 导出人员月考勤记录
     *
     * @param request
     * @return
     * @throws BizException
     */
    OssPathDTO exportMonthReport(EmpMonthReportExportParam request) throws BizException;

    /**
     * 导出人员日考勤记录
     *
     * @param param
     * @return
     * @throws BizException
     */
    OssPathDTO exportDayReport(EmpDayReportExportParam param) throws BizException;


    /**
     * 人员考勤统计
     *
     * @param deptId
     * @param startDate
     * @param endDate
     * @param pageNum
     * @param pageSize
     * @return
     */
    PageData<EmpDataDTO> empDayList(Integer deptId, Date startDate, Date endDate, Integer pageNum, Integer pageSize) throws BizException;

    /**
     * 设置计划出勤人数
     *
     * @param plan
     * @throws BizException
     */
    void setDataPlan(EmpAttendPlan plan) throws BizException;


    /**
     * 打卡记录
     *
     * @param empId
     * @param date
     * @param pageNum
     * @param pageSize
     * @param state
     * @return
     */
    PageData<AppEmpAttendRecordDTO> attendRecord(Integer empId, Date date, Integer pageNum, Integer pageSize, Integer state) throws BizException;

    /**
     * 打卡记录 不分页
     *
     * @param empId
     * @param date
     * @param state
     * @return
     */
    List<AppEmpAttendRecordDTO> attendRecord(Integer empId, Date date, Integer state) throws BizException;

    /**
     * 打卡记录 不分页
     *
     * @param deptId     组织机构ID
     * @param startTime  开始时间
     * @param endTime    结束时间
     * @param attendType 考勤类型
     * @return 打卡记录
     * @throws BizException 业务异常
     */
    List<AppEmpAttendRecordDTO> attendRecord(Integer deptId, Date startTime, Date endTime, AttendType attendType) throws BizException;

    /**
     * 人员管理-人脸识别记录(分页)
     *
     * @param pageNum
     * @param pageSize
     * @param deptId
     * @param keyword
     * @param startTime
     * @param endTime
     * @return
     * @throws BizException
     */
    PageData<AppFaceGateRecordDTO> attendFaceGateList(Integer pageNum, Integer pageSize, Integer deptId, String keyword, Date startTime, Date endTime) throws BizException;

    /**
     * 人员管理-人脸识别记录（不分页）
     *
     * @param param
     * @return
     * @throws BizException
     */
    OssPathDTO faceGateRecordExport(FaceGateRecordExportParam param) throws BizException;

    /**
     * 人员管理-访客记录
     *
     * @param pageNum
     * @param pageSize
     * @param deptId
     * @param startTime
     * @param endTime
     * @return
     */
    PageData<AppFaceGateRecordDTO> visitorList(Integer pageNum, Integer pageSize, Integer deptId, Date startTime, Date endTime) throws BizException;

    /**
     * 人员管理-智能闸机-导出访客记录
     * @param deptId
     * @param startTime
     * @param endTime
     * @return
     */
    OssPathDTO visitorListExport(Integer deptId, Date startTime, Date endTime) throws BizException;

    List<AppFaceGateRecordDTO> discernList(Integer deptId, Date startTime, Date endTime,Integer type);

    List<AppFaceGateRecordDTO> temperatureAbnormalList(Integer deptId,Date startTime, Date endTime);

    void syncRecord(AppEmpAttendSyncParam request)throws BizException;
}
